10 REM SHAPES DEMO 20 : 30 REM RICHARD L. RYLANDER 11/23/84 (REVISED 1/20/85 TO ADD LABELING) 40 : 50 GR=49378 :REM GRAPHIK MODUS 60 TX=49411 :REM TEXT MODUS 70 : 80 LB=893 :REM LINKE GRENZE 90 RB=894 :REM RECHTE GRENZE 100 UB=895 :REM OBERE GRENZE 110 DB=896 :REM UNTERE GRENZE 120 : 130 REM FLAGS FUER VERSCHIEDENE GRAFIKMODI 140 : 150 SH=838 :REM SCHATTIERUNG: 0=RANDOM, 1=HALBTON 160 SC=839 :REM SKALIERUNG:0=NORMAL (1:1), 1=SKAL. (4:3) FUER DARSTELLUNG 170 LT=898 :REM LICHTEINFALL: 0=NORMAL, 1=VON HINTEN BELEUCHTET 180 : 190 BO=53280 :REM RAHMENFARBE 200 : 210 REM FUNKTIONSADRESSEN 220 : 230 CL=51979 :REM BITMAP BEREICH LOESCHEN 240 CO=52001 :REM COLORBEREICH FUELLEN 250 : 260 SP=52119 :REM SPHERE 270 TR=52141 :REM RING VON OBEN 280 VC=52150 :REM ZYLINDER (VERTIKALE ACHSE) 290 HC=52153 :REM ZYLINDER (HORIZONTALE ACHSE) 300 VT=52186 :REM RINGSCHNITT (VERTIKALE ACHSE) 310 HT=52189 :REM RINGSCHNITT (AXIS HORIZONTALE ACHSE) 320 VS=52203 :REM SPULE (VERTIKALE ACHSE) 330 HS=52206 :REM SPULE (HORIZONTALE ACHSE) 340 : 350 REM EINZELNE SHAPES ZEICHNEN 360 : 370 POKE SH,1 :REM HALBTONSCHATTIERUNG 380 POKE SC,1 :REM SKALIERUNG 390 POKE LT,0 :REM NORMALBELEUCHTUNG 400 SYS(CL) :REM BILDSCHIRM LOESCHEN 410 SYS(CO),17*11+1 :REM FARBKOMBINATION - DUNKELGRAU (11) WEISSE PUNKTE (1) 414 REM AUF DEN MEISTEN FARBMONITOREN 420 POKE BO,1 :REM WEISSER RAHMEN 430 SYS(GR) :REM GRAFIK EINSCHALTEN 432 RW=12:CM=14:MD=1:A$="SHAPES DEMO":GOSUB 1900:REM TITEL 434 X1=110:Y1=120:X2=210:Y2=120:BC=1:DC=7:GOSUB 1700:REM COLOR TITEL 440 POKE LB,38:POKE RB,38:POKE UB,38:POKE DB,38 :REM SHAPE FENSTER 450 SYS(SP),40,199,38 455 RW=9:CM=2:MD=1:A$="KUGEL":GOSUB1900 460 SYS(HC),120,199,38,38 465 CM=11:A$="H-ZYLND.":GOSUB1900 470 SYS(VC),200,199 :REM VOREINGESTELLTE PARAMETER WERDEN BENUTZT 475 CM=21:A$="V-ZYLIND.":GOSUB1900 480 SYS(TR),280,199,15,38 485 CM=32:A$=" RING":GOSUB1900 490 SYS(VT),40,64 495 RW=23:CM=1:A$="H-RING":GOSUB1900 500 SYS(HT),120,64 505 CM=11:A$="V-RING":GOSUB1900 510 SYS(HS),200,64,5,100 515 CM=22:A$="H-SPULE":GOSUB1900 520 SYS(VS),280,64 525 CM=32:A$="V-SPULE":GOSUB1900 530 POKE 198,0:WAIT 198,1:POKE 198,0 540 REM AUF TASTE WARTEN 550 : 560 REM ZWEI "POKALE", EINER MIT HALBTON-, DER ANDERE MIT "RANDOM"-SCHATTIERUNG 570 : 580 SYS(CL):SYS(CO),16*11+1 582 RW=14:CM=14:A$="VERGLEICH":GOSUB 1900:RW=15:CM=16:A$="ZWEIER":GOSUB 1900 584 RW=16:CM=12:A$="SCHATTIERUNGEN":GOSUB 1900:RW=18:CM=14:A$="<-- HALBTON" 586 GOSUB 1900:RW=20:CM=15:A$="RANDOM -->":GOSUB 1900 590 POKE LB,255:POKE RB,255:POKE UB,49:POKE DB,255: REM AN DEN OBEREN RAND 600 SYS(SP),80,190,80 610 POKE UB,51:POKE DB,51: REM WEITERN SPRITE-TEIL ANHAENGEN 620 SYS(VS),80,69,10,130 630 POKE DB,9:POKE UB,8 640 SYS(VT),80,9,25,45 650 POKE SH,0 :REM AUF RANDOM SCHATTIERUNG UMSCHALTEN 660 POKE LB,255:POKE RB,255:POKE UB,49:POKE DB,255 670 SYS(SP),240,190,80 680 POKE UB,51:POKE DB,51 690 SYS(VS),240,69,10,130 700 POKE DB,9:POKE UB,8 710 SYS(VT),240,9,25,45 720 POKE 198,0:WAIT 198,1:POKE 198,0 740 : 750 REM ZEICHNE "WEIN" SZENE 760 POKE LT,1 :REM HINTERGRUNGBELEUCHTUNG 770 POKE SH,1 :REM HALBTONSCHATTIERUNG FUER FLASCHENETIKETT 780 SYS(CO):SYS(CL),255: REM BITMAP FUELLEN 790 POKE BO,0 : REM SCHWARZER HINTERGRUND 792 RW=0:CM=0:MD=2:A$="ZEICHENEN MIT":GOSUB 1900:RW=1:CM=0:A$="RUECKBELEUCHTUNG" 794 GOSUB 1900:RW=2:CM=0:A$="GEGEN GESETZTEN":GOSUB 1900 796 RW=3:CM=0:A$="HINTERGRUND":GOSUB 1900 798 RW=1:CM=26:A$="FARBEN WERDEN":GOSUB 1900 800 RW=2:CM=26:A$="NACHGEZEICHNET":GOSUB1900 810 REM ZEICHNE FLASCHE 820 POKE UB,0:POKE DB,255:POKE LB,255:POKERB,255 830 SYS(VT),150,10,30,50 840 POKE UB,255:SYS(VC),150,70,50,60 850 POKE DB,0:SYS(VT),150,130,6,50 860 POKE DB,55:POKE UB,0:SYS(VS),150,204,15,181 870 POKE UB,255:SYS(VC),150,221,16,17 880 : 890 REM ZEICHENE WEINGLAS 900 POKE UB,20:SYS(SP),80,120,60 910 POKE UB,35:POKE DB,34:SYS(VS),80,34,10,110 920 : 930 REM ZEICHENT EIN PAAR TRAUBEN 940 SYS(SP),8,8,8: 950 SYS(SP),20,8:SYS(SP),40,8:SYS(SP),12,20:SYS(SP),30,20:SYS(SP),25,16 960 : 970 REM ZEICHNET APFEL BESTEHEND AUS 2 RINGEN UND EINEM KUGELFRAGMENT 980 POKE UB,255:POKE DB,255:POKE LB,255:POKE RB,59 990 SYS(VT),260,29,0,50:SYS(VT),260,79 1000 POKE UB,43:POKE DB,43:SYS(SP),260,54,60 1010 REM APFELSTIEL ZEICHNEN 1020 POKE RB,0:POKE DB,0:SYS(TR),272,104,10,15 1030 REM BLATT ZEICHNEN 1040 POKE DB,255:POKE RB,0:SYS(SP),256,119,15 1050 REM "RANDOM"-SCHATTIERTES ETTIKETT HINZUFUEGEN ! 1060 POKE UB,255:POKE RB,255:POKE LB,6 1070 POKE SH,0:SYS(VC),150,72,50,48 1080 : 1090 REM BILD NACHCOLORIEREN 1100 SYS(CO),12 1110 X1=200:Y1=1:X2=315:Y2=100:DC=0:BC=2:GOSUB 1700 1120 X1=240:Y1=110:X2=255:Y2=150:BC=5:GOSUB 1700 1130 X1=260:Y1=110:X2=270:Y2=135:BC=9:GOSUB 1700 1140 X1=1:Y1=1:X2=48:Y2=30:BC=4:GOSUB 1700 1150 X1=140:Y1=205:X2=180:Y2=235:BC=7:GOSUB 1700 1160 X1=145:Y1=25:X2=195:Y2=115:BC=6:GOSUB 1700 1170 POKE 198,0:WAIT 198,1:POKE 198,0 1190 : 1200 REM "KAFFEE UND PLAETZCHEN" 1210 POKE SH,0 :REM RANDOM-SCHATTIERUNG FUER PLAETZCHEN 1220 SYS(CO),16*11+1:SYS(CL):POKE BO,1 1230 POKE LB,255:POKE RB,255:POKE UB,255:POKE DB,255 :REM KEIN SHAPE-FENSTER 1240 SYS(VT),60,20,20,60 1250 POKE RB,29:SYS(VT),99,60:POKE RB,255 1260 SYS(TR),188,180 1270 REM HALBTONSCHATTIERTE KAFFEETASSE HINZUFUEGEN. 1280 POKE SH,1:POKE UB,0:SYS(VT),188,20:POKE UB,255 1290 POKE DB,0:SYS(TR),278,110,20,40 1300 POKE DB,255:POKE UB,0:POKE LB,0 1310 SYS(TR),248,90,50,70:POKE LB,255:SYS(SP),248,110,10:POKE UB,255 1320 SYS(VC),308,100,10,10 1330 SYS(VC),188,77,60,57 1340 POKE DB,0:SYS(VT),188,134,40,60 1360 SYS(CO),1+16*9 :REM 1=WEISSER HINTERGRUND, 9=BRAUNE PUNKTE 1370 X1=130:Y1=1:X2=319:Y2=136:BC=1:DC=5:GOSUB 1700 1380 X1=250:Y1=144:X2=319:Y2=144:GOSUB 1700 1390 POKE 198,0:WAIT 198,1:POKE 198,0 1410 : 1420 REM ZEICHNE "VERBUNDENE" RINGE DURCH UEBERLAPPUNG DER FENSTER 1430 POKE LT,0 :REM BLAUE PUNKTE AUF WEISS, KEINE HINTERGRUNDBELEUTUNG 1440 SYS(CL):SYS(CO),1+16*6: REM 1=WEISSER INTERGRUND, 6=BLAUE PUNKTE 1450 POKE UB,255:POKE DB,255:POKE LB,255:POKE RB,255: REM KEINE FENSTER 1460 POKE SH,0 :REM ZUFAELLIGE SCHATTIERUNG 1470 SYS(TR),244,84,48,70 1480 SYS(TR),160,84:SYS(TR),76,84 1490 SYS(TR),118,156:SYS(TR),202,156 1500 REM UEBERLAPPENDE ZONEN HINZUFUEGEN 1510 POKE RB,0:POKE DB,0:SYS(TR),160,84:POKE RB,255:POKE LB,0 1520 SYS(TR),76,84:POKE DB,255:POKE UB,0:SYS(TR),118,156 1530 POKE LB,255:POKE RB,0:SYS(TR),202,156:POKE LB,27 1540 POKE DB,0:POKE UB,255:SYS(TR),160,84 1550 POKE DB,0:POKE UB,255:SYS(TR),160,84 1560 POKE LB,255:POKE UB,27:SYS(TR),244,84 1570 POKE LB,0:POKE RB,27:POKE UB,255:SYS(TR),244,84 1580 POKE 198,0 1590 GET A$:IF A$= "" THEN 1590 1600 SYS(TX):POKE BO,14:REM RUECKKEHR ZUM TEXTMODUS 1610 END 1620 : 1630 REM UNTERPROGRAMM ZU NACHCOLORIEREN VERSCHIEDENER ZONEN 1640 REM ACHTUNG: ES KANN JEWEILS NUR EINE RECHTECKIGE FLAECHE 1650 REM VON 8X8 PUNKTEN EINGEFAERBT WERDEN !! 1660 REM (X1,Y1)=UNTERER LINKER PUNKT, (X2,Y2)=OBERER RECHTER PUNKT 1690 REM DIE Y-KOORDINATEN MUESSEN "UNSKALLIERT" SEIN. FALLS SCALE-FLAG GESETZT: 1700 IF PEEK(SC)THEN Y1=(Y1+1)*213/256:Y2=(Y2+1)*213/256 1710 REM UEBERGABEVARIABLE IST CC. 1720 REM CC=16*DC + BC [DC=PUNKT FARBE, BC= HINTERGRUNDFARBE] 1730 CC=16*DC+BC 1740 FOR IX=INT(X1/8) TO INT(X2/8) 1750 FOR IY=INT(Y1/8) TO INT(Y2/8) 1760 POKE 34752+IX-40*IY,CC 1770 NEXT:NEXT:RETURN 1780 : 1790 REM "TEXT"-UNTERROUTINE ERMOEGLICHT EINFUEGEN VON TEXT IN DIE BILDER. 1800 REM "RW" UND "CM" SIND DIE ZEILEN(0-24) UND SPALTEN(0-39) KOORDINATEN DES 1810 REM ERSTEN BUCHSTABEN DES ZU DRUCKENDEN TEXTSTRINGS. 1820 REM UEBERGABEVARIABLE FUER TEXT IST A$ 1830 REM "MD" ZEIGT DEN DRUCKMODUS AN: 1840 REM 1 - NORMAL ("SCHWARZE" BUCHSTABEN AUF "WEISSEM" HINTERGRUND) 1850 REM 2 - INVERSE ("WEISSE" BUCHSTABEN AUF "SCHWARZEM" HINTERGRUND) 1860 REM 3 - BUCHSTABEN WERDEN MIT LOGISCHEM ODER MIT HINTERGRUND VERKNUEPFT. 1870 REM 4 - BUCHSTABEN WERDEN MIT LOGISCHEM UND MIT HINTERGRUND VERKNUEPFT. 1880 REM 5 - BUCHSTABEN WERDEN MIT LOGISCHEM EXOR MIT HINTERGRUND VERKNUEPFT. 1890 : 1900 SB=40952:TB=54272:IF(MD AND 1)THEN TB=53248:REM BASISADRESSEN 1910 OS=320*RW+8*CM:REM ADRESSE DES ZEICHENGENERATORS 1920 POKE 56334,PEEK(56334)AND 254:REM DISABLE IRQ TIMER 1930 POKE 1,PEEK(1)AND 251:REM CHARACTER ROM EINSCHALTEN 1940 L=LEN(A$):FOR N=1 TO L:N8=N*8+OS+SB 1950 X=ASC(MID$(A$,N,1)):IF X>63 THEN X=X-64 1960 TC=TB+8*X 1970 ON MD GOTO 1980,1980,1990,2000,2010 1980 POKE 53231,36:GOTO 2020 1990 POKE 53231,17:GOTO 2020 2000 POKE 53231,49:GOTO 2020 2010 POKE 53231,81 2020 POKE252,N8/256:POKE251,N8-256*INT(N8/256) 2030 POKE254,TC/256:POKE253,TC-256*INT(TC/256) 2040 SYS(53221):NEXT 2050 POKE 1,PEEK(1)OR 4:POKE 56334,PEEK(56334)OR 1:REM NORMAL SCHALTEN 2060 RETURN